package com.cycleit.cyclevalidator {
	import mx.events.ValidationResultEvent;
	import mx.utils.StringUtil;
	import mx.validators.EmailValidator;
	import mx.validators.ValidationResult;
	import mx.validators.Validator;

	/**
	 * Custom validator que permite validar una lista de direcciones de correo,
	 * desde un campo de texto, siempre que estas se separen por comas.
	 *
	 * */
	public class EmailListValidator extends Validator {

		// Define Array for the return value of doValidation().
		private var _results:Array;

		// TODO internacionalizar
		public var emailErrorString:String = "Algunas de las direcciones de correo son erróneas";

		// Constructor.
		public function EmailListValidator() {
			// Call base class constructor. 
			super();
		}

		/**
		 * Método que contiene la lógica de validación.
		 */
		override protected function doValidation(value:Object):Array {
			_results = new Array();

			if (StringUtil.trim(value as String) == "") {
				return super.doValidation(value);
			}

			var emailList:Array = (value as String).split(",");
			var emailValidator:EmailValidator = new EmailValidator();

			if (_results.length > 0)
				return _results;

			for (var i:Number = 0; i < emailList.length; i++) {
				var email:String = StringUtil.trim(emailList[i] as String);
				var vre:ValidationResultEvent = emailValidator.validate(email);
				if (vre.type == ValidationResultEvent.INVALID) {
					_results.push(new ValidationResult(true, null, "wrongMail", emailErrorString));
				}
			}

			return _results;
		}
	}
}